package abfactory;

import bean.Hat;
import bean.Shoes;

/**
 * Title: ShoesStore <br>
 * Description:抽象工厂模式案例 <br>
 * Copyright (c) 传化物流版权所有 2017 <br>
 * Created DateTime: 2017-3-6 10:08
 * Created by Wentao.Shi.
 */

public class ShoesStore {
    public static void main(String[] args) {
        Factory1 factory1 =new Factory1();
        Shoes shoes= factory1.shoesFactory();
        shoes.saleShoes();
        Hat hat=factory1.hatFactory();
        hat.saleHat();
        Factory2 factory2 =new Factory2();
        shoes= factory2.shoesFactory();
        shoes.saleShoes();
        hat=factory2.hatFactory();
        hat.saleHat();
    }
}
/**
 抽象工厂模式相对于工厂方法模式来说，每个具体工厂可以生产一族产品（即多种产品）；
 而工厂方法模式是具体工厂生产相应的具体产品，只能生产一种产品。当产品族中只有一种产品时抽象工厂模式退化成工厂方法模式

 工厂方法模式： 一个抽象产品类，可以派生出多个具体产品类。    一个抽象工厂类，可以派生出多个具体工厂类。
 每个具体工厂类只能创建一个具体产品类的实例。  抽象工厂模式： 多个抽象产品类，每个抽象产品类可以派生出多个具体产品类。
 一个抽象工厂类，可以派生出多个具体工厂类。
 每个具体工厂类可以创建多个具体产品类的实例。
 区别： 工厂方法模式只有一个抽象产品类，而抽象工厂模式有多个。   工厂方法模式的具体工厂类只能创建一个具体产品类的实例，而抽象工厂模式可以创建多个。


 抽象工厂模式的缺点：如果需要增加新的产品树
 */